package com.cw.jeeyt.controller.facade;

import java.util.ArrayList;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cw.jeeyt.api.dto.response.JsonResultDto;
import com.cw.jeeyt.common.DataTable;
import com.cw.jeeyt.common.ResultData;
import com.cw.jeeyt.common.enums.EnumOperateFlag;
import com.cw.jeeyt.common.web.BaseController;
import com.cw.jeeyt.service.bo.facade.FacadeInfoBo;
import com.cw.jeeyt.service.directive.PageDictDirective;
import com.cw.jeeyt.service.directive.PermissionDirective;
import com.cw.jeeyt.service.facade.FacadeInfoService;
import com.cw.lang.common.utils.CollectionUtil;
import com.cw.lang.common.utils.PageUtil;
import com.cw.lang.mybatis.dto.PageInfo;
import com.cw.lang.mybatis.dto.PageParam;

import lombok.extern.slf4j.Slf4j;

/**
 * 接口信息控制层
 *
 * @author chenw
 * @date 2019-10-31 23:19:05
 */
@Controller
@RequestMapping( "/facadeInfo" )
@Slf4j
public class FacadeInfoController extends BaseController{
	@Resource
	private FacadeInfoService facadeInfoService;
	/**
	 * 跳转到接口信息列表查询页面
	 *
	 * @return
	 */
	@RequestMapping( value = "/query" )
	public ModelAndView query(){

		ModelAndView mv = new ModelAndView("facade/facadeInfo_index");
		mv.addObject("permission", new PermissionDirective());
		mv.addObject("PageDict", new PageDictDirective());
		return mv;
	}
	/**
	 * 加载DataTable列表数据
	 *
	 * @param dataTable datatable数据
	 * @return
     */
	@ResponseBody
	@RequestMapping( value = "/listFacadeInfo")
	public ResultData listFacadeInfo(@RequestBody DataTable dataTable) throws Exception {

		FacadeInfoBo facadeInfoBo = JSONObject.parseObject(JSON.toJSONString(dataTable.queryCond),FacadeInfoBo.class);
		if(facadeInfoBo == null){
			facadeInfoBo = FacadeInfoBo.builder().build();
		}

		PageParam pageParam = new PageParam();
        pageParam.setPageNum(PageUtil.calPageNum(dataTable.getStart(),dataTable.getLength()));
        pageParam.setPageSize(dataTable.getLength());
		PageInfo<FacadeInfoBo> pageInfo = facadeInfoService.selectPage(facadeInfoBo,pageParam);
		return ResultData.builder()
            .draw(dataTable.getDraw())
            .data(CollectionUtil.isNotEmpty(pageInfo.getList())?pageInfo.getList():new ArrayList())
            .recordsTotal(pageInfo.getTotal())
            .recordsFiltered(pageInfo.getTotal())
            .build();
	}

	/**
	 * 跳转到接口信息表单页面
	 *
	 * @param operation 操作  add 新增 edit修改 view查看
	 * @return
     */
	@RequestMapping( value = "/to-form" )
	public ModelAndView editEdit(Long id,String operation) {

		ModelAndView mv = new ModelAndView("facade/facadeInfo_form");
		FacadeInfoBo facadeInfoBo = null;
		if(EnumOperateFlag.ADD.getCode().equals(operation)){
			facadeInfoBo = FacadeInfoBo.builder().build();
		}else{
			facadeInfoBo = facadeInfoService.selectByKey(id);
		}
		mv.addObject("facadeInfo", facadeInfoBo);
		mv.addObject("operation", operation);
		mv.addObject("PageDict", new PageDictDirective());
		mv.addObject("permission", new PermissionDirective());
		return mv;
	}
	/**
	 * 根据操作类型保存接口信息数据
	 *
	 * @param facadeInfoBo
	 * @param operation add 新增  edit 修改
     */
	@ResponseBody
	@RequestMapping(value = "/saveFacadeInfo",method=RequestMethod.POST)
	public JsonResultDto saveFacadeInfo(FacadeInfoBo facadeInfoBo,String operation) {

		JsonResultDto jsonResultDto = new JsonResultDto(false);
		try{
			if(operation.equals(EnumOperateFlag.ADD.getCode())){
				facadeInfoService.addFacadeInfo(facadeInfoBo);
			}else if(operation.equals(EnumOperateFlag.EDIT.getCode())){
				facadeInfoService.modifyFacadeInfo(facadeInfoBo);
			}
			jsonResultDto.setMsg("保存成功");
            jsonResultDto.setSuccess(true);
		}catch(Exception e){
			e.printStackTrace();
			jsonResultDto.setMsg("保存失败:" + e.getMessage());
		}
		return jsonResultDto;
	}
	/**
	 * 删除接口信息
	 *
	 * @param facadeInfoBo
	 * @throws Exception
	 */
	@RequestMapping( value = "/delete" )
	@ResponseBody
	public JsonResultDto delete(FacadeInfoBo facadeInfoBo) throws Exception{

		JsonResultDto jsonResultDto = new JsonResultDto(false);
		try{
			facadeInfoService.deleteFacadeInfo(facadeInfoBo);
			jsonResultDto.setMsg("删除成功");
            jsonResultDto.setSuccess(true);
		}catch(Exception e){
			e.printStackTrace();
			jsonResultDto.setMsg("删除失败:" + e.getMessage());
		}
		return jsonResultDto;
	}
}
